'''
假设我们有一个列表list1 = [1,2,3,4,5]
现在我们想得到这个列表中每一个元素的平方所组成的一个新的列表
我们可以用3种方法处理：
 · for循环迭代赋值
 · lambda匿名函数
 · 推导式实现
'''

list1 = [1,2,3,4,5]
square_list = []

# for循环
for value in list1:
    square_list.append(value ** 2)

# lambda匿名函数
square_list = list(map(lambda x: x**2, list1))

# 列表推导式
square_list = [x**2 for x in list1]


# 列表推导式 嵌套用法
str1 = 'zzh'
tuple1 = (1,2,3)

print([(x, y) for x in str1 for y in tuple1]) # 这里等同于一个for循环嵌套了另一个for循环，前面的在最外层
# [('z', 1), ('z', 2), ('z', 3), ('z', 1), ('z', 2), ('z', 3), ('h', 1), ('h', 2), ('h', 3)]


'''
字典推导可以从任何以键值对作为元素的可迭代对象将其元素进行过滤或是加工,然后再新建构建出一个字典。
其语法基本和列表推导式类似，只不过最外层的 `[]` 要换成 `{}`。
'''

# 将列表转换为字典，用数字索引作为关键字。
seq1 = ['a','b','c']
new_seq = {k:v for k,v in enumerate(seq1)}
# {0: 'a', 1: 'b', 2: 'c'}


# 使用zip将多个可迭代对象聚合成一个新的迭代对象。
names = ['cxy', 'zyw','zrh']
ages = [22, 23, 24]
friends = {n:a for n,a in zip(names,ages)}
print(friends)